package 案例;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

//指定一个目录，扫描这个目录，找到文件名中包含 指定字符的文件
//并且提示用户 是否删除这个文件，根据用户的输入决定是否删除
public class 案例1 {
    public static void main(String[] args) throws IOException {
        //1.让用户指定一个待扫描的根目录,以及查找文件名的关键词
        System.out.println("请输入要是扫描的根目录(绝对路径)：");
        Scanner scanner=new Scanner(System.in);
        String root=scanner.next();
        File rootPath=new File(root);
        if (!rootPath.isDirectory()) {
            //如果输入的不是一个根目录
            System.out.println("您输入的路径有误!!程序直接退出!!!");
            return;
        }
        System.out.println("请输入查找文件名中的关键词：");
        String key=scanner.next();

        //2.递归遍历目录
        //res 表示递归遍历的结果，包含所有带有 key关键词的文件
        List<File> res=new ArrayList<>();
        scanDic(rootPath,key,res);

        //3.遍历res，让用户确认是否删除该文件，根据用户输入决定是否删除
        for(File f:res) {
            System.out.println(f.getCanonicalFile()+" 是否删除？？（Y/N）");
            String input = scanner.next();
            if(input.equals("Y")) {
                f.delete();
            }
        }
    }

    //递归遍历目录，找出所有含有key关键词的文件
    private static void scanDic(File rootPath, String key, List<File> res) throws IOException {
        //list 返回文件名(String)
        //listFiles 返回File[]
        File[] files = rootPath.listFiles();//返回rootPath目录下的所有文件,当目录文件中没有东西时files为null


        if (files==null || files.length==0) {
            //当前目录 是一个空目录
            System.out.println("当前目录为空");
            return;
        }

        for (File f:files) {
            if (f.isDirectory()) {
                //如果当前文件是一个目录文件，就递归继续查找
                scanDic(f,key,res);
            }else {
                //如果当前文件是一个普通文件，判断这个文件是否含有 关键词key
                if (f.getName().contains(key)){
                    res.add(f.getCanonicalFile());
                }
            }
        }

    }
}
